using System;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Common;
using DataAccess;
using Microsoft.ApplicationBlocks.Data;

namespace BusinessRules
{
    public class IvaRecursosAsignados
    {

        private const String IRA_ID_PARAM = "@IRA_ID";
        private const String IRA_VALOR_PARAM = "@IRA_VALOR";
        private const String IVI_ID_PARAM = "@IVI_ID";
        private const String ZON_ID_PARAM = "@ZON_ID";
        private const String IRA_CONVENIOS_PARAM = "@IRA_CONVENIOS";
        
        private string _cadenaConexion;

        public string CadenaConexion
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

        #region IvaRecursosAsignados

        public IvaRecursosAsignados(string strCadenaConecxion)
        {
            CadenaConexion = strCadenaConecxion;
        }

        #endregion


        #region BuscarTodos

        public IvaRecursosAsignadosData BuscarTodos()
        {
            IvaRecursosAsignadosData objIvaRecursosAsignadosData = new IvaRecursosAsignadosData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_COSNULTAR_IVA_RECURSOS_ASIGNADOS", objIvaRecursosAsignadosData);
            return objIvaRecursosAsignadosData;
        }

        #endregion

        #region agregarRecursosAsignados

        public decimal agregarRecursosAsignados(IvaRecursosAsignadosData objDT, params SqlTransaction[] objTransaction)
        {
            decimal decSalida = 0;
            try
            {

                foreach (DataRow objRow in objDT.Rows)
                {

                    SqlParameter param1 = new SqlParameter(IRA_ID_PARAM, SqlDbType.Decimal);
                    SqlParameter param2 = new SqlParameter(IRA_VALOR_PARAM, objRow[IvaRecursosAsignadosData.IRA_VALOR_FIELD]);
                    SqlParameter param3 = new SqlParameter(IVI_ID_PARAM, objRow[IvaRecursosAsignadosData.IVI_ID_FIELD]);
                    SqlParameter param4 = new SqlParameter(ZON_ID_PARAM, objRow[IvaRecursosAsignadosData.ZON_ID_FIELD]);
                    SqlParameter param5 = new SqlParameter(IRA_CONVENIOS_PARAM, objRow[IvaRecursosAsignadosData.IRA_CONVENIOS_FIELD]);

                    param1.Direction = ParameterDirection.Output;

                    //param1.Direction = ParameterDirection.Output;
                    SqlParameter[] parameters = { param1, param2, param3, param4, param5 };
                    if (objTransaction.Length == 0)
                    {

                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                  "PAS_ADICIONAR_IVA_RECURSOS_ASIGNADOS", parameters);
                    }
                    else
                    {

                        SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                  "PAS_ADICIONAR_IVA_RECURSOS_ASIGNADOS", parameters);
                    }
                    decSalida = Convert.ToDecimal(param1.Value);
                }


            }
            catch (Exception objEx)
            {

            }
            return decSalida;
        }

        #endregion

        #region agregarRecursosAsignadosPlanesProgramas

        public void agregarRecursosAsignadosPlanesProgramas(string strIraId, string strSpzId, params SqlTransaction[] objTransaction)
        {
            decimal decSalida = 0;
            try
            {
                    SqlParameter param1 = new SqlParameter(IRA_ID_PARAM, strIraId);
                    SqlParameter param2 = new SqlParameter("@SPZ_ID", strSpzId);
 
                    SqlParameter[] parameters = { param1, param2 };
                    if (objTransaction.Length == 0)
                    {

                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                  "PAS_ADICIONAR_IVA_RECURSOS_ASIGNADOS_SIG_PROGRAMAS", parameters);
                    }
                    else
                    {

                        SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                  "PAS_ADICIONAR_IVA_RECURSOS_ASIGNADOS_SIG_PROGRAMAS", parameters);
                    }
            }
            catch (Exception objEx)
            {

            }
           
        }

        #endregion

        #region AdicionarRecursosAsignadosContransacciones

        public void AdicionarRecursosAsignadosContransacciones(IvaRecursosAsignadosData objDS)
        {
            DataTable objDataTableSpzId = null;
            decimal decIdentificadorIraId = 0;
            decimal decIdentificadorSpzId = 0;
            
            
          
            string strSpzId = "";

            //if (objDS.Rows.Count > 0)
            //{
            //    objDataTableSpzId = ConsultarIvaRecursosAsignadosPlanPrograma(
            //       objDS.Rows[0][IvaRecursosAsignadosData.IRA_ID_FIELD].ToString());
            //}

                
                    //strSpzId = objDataTableSpzId.Rows[0][SigProgramaZonasGeograficasData.SPZ_ID_FIELD].ToString();
                    SqlConnection objConexion = new SqlConnection(CadenaConexion);
                    objConexion.Open();
                    SqlTransaction objTransaccion = objConexion.BeginTransaction();

                    try
                    {
                        //Actualizar Recursos Asignados
                       decIdentificadorIraId = agregarRecursosAsignados(objDS, objTransaccion);

                        //Agregar  SigProgramaZonasGeograficas
                        SigProgramaZonasGeograficas objSigProgramaZonasGeograficas = new SigProgramaZonasGeograficas(CadenaConexion);
                        SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
                        DataRow fila = objSigProgramaZonasGeograficasData.NewRow();
                        
                        fila[SigProgramaZonasGeograficasData.PRG_ID_FIELD] = "P-0012";
                        fila[SigProgramaZonasGeograficasData.PRG_CANTIDAD_FIELD] = 1;
                        fila[SigProgramaZonasGeograficasData.PRG_DESCRIPCION_FIELD] = "DISTRIBUCION DEL 25% DEL 4%  IVA LA TELEFONIA CELULAR";

                        switch (objDS.Rows[0][IvaRecursosAsignadosData.IVI_ID_FIELD].ToString())
                        {

                            case "4":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2003";
                                break;
                            case "5":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2004";
                                break;
                            case "6":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2005";
                                break;
                            case "7":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2006";
                                break;
                            case "8":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2007";
                                break;
                            case "9":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2008";
                                break;
                            case "10":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2009";
                                break;
                            case "11":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2010";
                                break;
                            case "12":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2011";
                                break;
                            case "13":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2012";
                                break;
                        }

                        fila[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD] = Convert.ToDecimal(objDS.Rows[0][IvaRecursosAsignadosData.IRA_VALOR_FIELD]) * 2;
                        fila[SigProgramaZonasGeograficasData.ZON_ID_FIELD] = objDS.Rows[0][IvaRecursosAsignadosData.ZON_ID_FIELD] + "000";
                        fila[SigProgramaZonasGeograficasData.PRG_ESTADO_FIELD] = EnumHelper.GetDescription(Utilidad.Estados.Publicado);
                        objSigProgramaZonasGeograficasData.Add(fila);
                        decIdentificadorSpzId = objSigProgramaZonasGeograficas.AdicionarProgramaZonasGeograficas(
                            objSigProgramaZonasGeograficasData, objTransaccion);

                        // Agregar Tabla intermedia
                        agregarRecursosAsignadosPlanesProgramas(decIdentificadorIraId.ToString(), decIdentificadorSpzId.ToString(), objTransaccion);
                        objTransaccion.Commit();
                    }
                    catch (Exception ex)
                    {
                        objTransaccion.Rollback();
                        throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", GetType().FullName), ex);
                    }
                    finally
                    {
                        if (objConexion != null)
                        {
                            objConexion.Close();
                        }

                        if (objTransaccion != null)
                        {
                            objTransaccion.Dispose();
                        }
                        if (objConexion != null)
                        {
                            objConexion.Dispose();
                        }
                    }
                


        }

        #endregion

        #region actualizarRecursosAsignados

        public void actualizarRecursosAsignados(IvaRecursosAsignadosData objDT, params SqlTransaction[] objTransaction)
        {
            try
            {

                foreach (DataRow objRow in objDT.Rows)
                {

                    SqlParameter param1 = new SqlParameter(IRA_ID_PARAM, objRow[IvaRecursosAsignadosData.IRA_ID_FIELD]);
                    SqlParameter param2 = new SqlParameter(IRA_VALOR_PARAM, objRow[IvaRecursosAsignadosData.IRA_VALOR_FIELD]);
                    SqlParameter param3 = new SqlParameter(IVI_ID_PARAM, objRow[IvaRecursosAsignadosData.IVI_ID_FIELD]);
                    SqlParameter param4 = new SqlParameter(ZON_ID_PARAM, objRow[IvaRecursosAsignadosData.ZON_ID_FIELD]);
                    SqlParameter param5 = new SqlParameter(IRA_CONVENIOS_PARAM, objRow[IvaRecursosAsignadosData.IRA_CONVENIOS_FIELD]);
                    //param1.Direction = ParameterDirection.Output;
                    SqlParameter[] parameters = { param1, param2, param3, param4, param5 };
                    if (objTransaction.Length == 0)
                    {

                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                  "PAS_ACTUALIZAR_IVA_RECURSOS_ASIGNADOS", parameters);
                    }
                    else
                    {

                        SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                  "PAS_ACTUALIZAR_IVA_RECURSOS_ASIGNADOS", parameters);
                    }
                }


            }
            catch (Exception objEx)
            {

            }
        }

        #endregion

        #region ActualizarRecursosAsignadosContransacciones

        public decimal ActualizarRecursosAsignadosContransacciones(IvaRecursosAsignadosData objDS)
        {
            DataTable objDataTableSpzId = null;
            decimal decIdentificador = 0;
            string strSpzId = "";

            if (objDS.Rows.Count > 0)
            {
                objDataTableSpzId = ConsultarIvaRecursosAsignadosPlanPrograma(
                   objDS.Rows[0][IvaRecursosAsignadosData.IRA_ID_FIELD].ToString());
            }

            if (objDataTableSpzId != null)
                if (objDataTableSpzId.Rows.Count > 0)
                {
                    strSpzId = objDataTableSpzId.Rows[0][SigProgramaZonasGeograficasData.SPZ_ID_FIELD].ToString();
                    SqlConnection objConexion = new SqlConnection(CadenaConexion);
                    objConexion.Open();
                    SqlTransaction objTransaccion = objConexion.BeginTransaction();

                    try
                    {
                        //Actualizar Recursos Asignados
                        actualizarRecursosAsignados(objDS, objTransaccion);

                        //Actualizar  SigProgramaZonasGeograficas
                        SigProgramaZonasGeograficas objSigProgramaZonasGeograficas = new SigProgramaZonasGeograficas(CadenaConexion);
                        SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
                        DataRow fila = objSigProgramaZonasGeograficasData.NewRow();
                        fila[SigProgramaZonasGeograficasData.SPZ_ID_FIELD] = strSpzId;
                        fila[SigProgramaZonasGeograficasData.PRG_ID_FIELD] = "P-0012";
                        fila[SigProgramaZonasGeograficasData.PRG_CANTIDAD_FIELD] = 1;
                        fila[SigProgramaZonasGeograficasData.PRG_DESCRIPCION_FIELD] = "DISTRIBUCION DEL 25% DEL 4%  IVA LA TELEFONIA CELULAR";

                        switch (objDS.Rows[0][IvaRecursosAsignadosData.IVI_ID_FIELD].ToString())
                        {

                            case "4":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2003";
                                break;
                            case "5":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2004";
                                break;
                            case "6":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2005";
                                break;
                            case "7":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2006";
                                break;
                            case "8":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2007";
                                break;
                            case "9":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2008";
                                break;
                            case "10":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2009";
                                break;
                            case "11":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2010";
                                break;
                            case "12":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2011";
                                break;
                            case "13":
                                fila[SigProgramaZonasGeograficasData.PRG_ANO_FIELD] = "2012";
                                break;
                        }

                        fila[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD] = Convert.ToDecimal(objDS.Rows[0][IvaRecursosAsignadosData.IRA_VALOR_FIELD]) * 2;
                        fila[SigProgramaZonasGeograficasData.ZON_ID_FIELD] = objDS.Rows[0][IvaRecursosAsignadosData.ZON_ID_FIELD] + "000";
                        fila[SigProgramaZonasGeograficasData.PRG_ESTADO_FIELD] = EnumHelper.GetDescription(Utilidad.Estados.Publicado);
                        objSigProgramaZonasGeograficasData.Add(fila);
                        objSigProgramaZonasGeograficas.actualizarProgramaZonasGeograficas(
                            objSigProgramaZonasGeograficasData, objTransaccion);

                        objTransaccion.Commit();
                    }
                    catch (Exception ex)
                    {
                        objTransaccion.Rollback();
                        throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", GetType().FullName), ex);
                    }
                    finally
                    {
                        if (objConexion != null)
                        {
                            objConexion.Close();
                        }

                        if (objTransaccion != null)
                        {
                            objTransaccion.Dispose();
                        }
                        if (objConexion != null)
                        {
                            objConexion.Dispose();
                        }
                    }
                }


            return decIdentificador;

        }

        #endregion

        #region ConsultarIvaRecursosAsignadosPlanPrograma

        public DataTable ConsultarIvaRecursosAsignadosPlanPrograma(string strIraId, params SqlTransaction[] objTransaction)
        {
            SqlParameter param1 = new SqlParameter(IRA_ID_PARAM, strIraId);

            //param1.Direction = ParameterDirection.Output;

            //param1.Direction = ParameterDirection.Output;
            SqlParameter[] parameters = { param1 };

            DataTable objDataTable = new DataTable();

            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure,
                                       "PAS_COSNULTAR_IVA_RECURSOS_ASIGNADOS_SIG_PROGRAMAS_IRA_ID", objDataTable,
                                       parameters);


            return objDataTable;
        }

        #endregion

        #region EliminarRecursosAsignados

        public void EliminarRecursosAsignados(string strId, params SqlTransaction[] objTransaction)
        {
            try
            {
                SqlParameter param1 = new SqlParameter(IRA_ID_PARAM, strId);
                SqlParameter[] parameters = { param1 };


                if (objTransaction.Length == 0)
                {

                    SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_IVA_RECURSOS_ASIGNADOS", parameters);
                }
                else
                {
                    SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure, "PAS_ELIMINAR_IVA_RECURSOS_ASIGNADOS", parameters);
                }
            }
            catch (Exception)
            {

                throw;
            }

        }

        #endregion

    }
}
